package com.kfm.jdbc.day0330;

import java.io.*;

public class FileCombiner {

    public static void main(String[] args) {
        FileCombiner combiner = new FileCombiner();
        long size = combiner.join(new File("d:\\io\\cutter\\"), new File("d:\\io\\cutter\\kxmrg.mp4"));
        System.out.println("合并后的文件大小：" + size);
    }

    /**
     * 合并文件
     * @param dir 分割后的文件所在目录
     * @param target 合并后的文件
     * @return 合并后的文件大小
     */
    public long join(final File dir, final File target){
        // 1. 读取文件
        if (dir == null || !dir.exists() || !dir.isDirectory() || target == null) {
            throw new IllegalArgumentException("参数不合法");
        }
        // 判断目录是否存在，不存在则创建
        if (!target.getParentFile().exists()){
            target.getParentFile().mkdirs();
        }
        // 文件数量
        int count = 0;
        try {
            FileOutputStream fos = new FileOutputStream(target);
            File[] files = dir.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.contains(".part");
                }
            });
            for (File file : files) {
                if (file.getName().endsWith(".part" + ++count)){
                    // 读取文件
                    FileInputStream fis = new FileInputStream(file);
                    byte[] bytes = new byte[1024 * 1024 * 10];
                    int len = -1;
                    while ( (len = fis.read(bytes)) != -1){
                        fos.write(bytes, 0, len);
                    }
                    fis.close();
                }
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return target.length();
    }
}
